var getVarType = {
	// 1. 对象
	isObjEmpty: function (data) {
		for (var i in data) {
			return 'obj'; // 如果不为空，则会执行到这一步，返回false
		}
	},

	// 2. 函数
	isFunction: function (data) {
		// 原生写法
		if (Object.prototype.toString.call(data) === '[object Function]') {
			// 是函数，表示
			return 'function';
		}
	},

	// 3. 数组
	isArray: function (data) {
		// 原生写法
		if (Object.prototype.toString.call(data) === '[object Array]') {
			// 是函数，表示
			return 'array';
		}
	},

	// 4. 字符串
	isString: function (data) {
		// 原生写法
		if (Object.prototype.toString.call(data) === '[object String]') {
			// 是函数，表示
			return 'string';
		}
	},
};

function objDeepCopy(data) {
	var dataCopy = getVarType.isArray(data) == 'array' ? [] : {};
	for (var item in data) {
		dataCopy[item] =
			typeof data[item] === 'object' && data[item] != null ? objDeepCopy(data[item]) : data[item];
	}
	return dataCopy;
}

function getType(obj) {
	if (Object.prototype.toString.call(obj) === '[object Number]') {
		// 数字
		return 'Number';
	} else if (Object.prototype.toString.call(obj) === '[object String]') {
		// 字符串
		return 'String';
	} else if (Object.prototype.toString.call(obj) === '[object Array]') {
		// 数组
		return 'Array';
	} else if (Object.prototype.toString.call(obj) === '[object Function]') {
		// 函数
		return 'Function';
	} else if (Object.prototype.toString.call(obj) === '[object Boolean]') {
		// Boolean
		return 'Boolean';
	} else if (Object.prototype.toString.call(obj) === '[object Null]') {
		// Null
		return 'Null';
	} else if (Object.prototype.toString.call(obj) === '[object Object]') {
		// Object
		return 'Object';
	} else if (Object.prototype.toString.call(obj) === '[object Undefined]') {
		// Undefined
		return 'Undefined';
	}
}
function clone(obj) {
	var dataCopy = getType(obj) == 'Array' ? [] : {};
	for (var item in obj) {
		dataCopy[item] = typeof obj[item] === 'object' ? clone(obj[item]) : obj[item];
	}
	return dataCopy;
}
// 两个对象合并，data_2复制到data_1上，目前只能合并层级为2的
function objCombine(obj_1, obj_2) {
	var d_1 = clone(obj_1),
		d_2 = clone(obj_2);

	for (var key in d_2) {
		// 循环d_2，如果d_1没有这一条，直接复制过去，或d_1有这条，但d_2[key]不是对象
		if (!d_1.hasOwnProperty(key) || getType(d_2[key]) != 'Object') {
			d_1[key] = d_2[key];
		} else {
			// 循环d_2[key]
			for (var k in d_2[key]) {
				// 直接复制过去
				d_1[key][k] = d_2[key][k];
			}
		}
	}
	return d_1;
}

var utils = {
	// 判断类型
	getVarType: getVarType,

	getType: getType,

	// 深拷贝一个对象（对象中可以带数组）
	objCombine: objCombine,

	// 深拷贝对象
	objDeepCopy: objDeepCopy,

	// 替换null
	replaceNull: function (str) {
		if (str == null) {
			return '';
		} else {
			return str;
		}
	},
};
export default utils;
